// 1.引入 axios  vue  qs
import Vue from "vue";
import axios from "axios";
import qs from "qs";
const vm = new Vue();
import { delay } from "../utils/dounce.js";

// 2.后端服务地址：
let baseURL = "";
if (process.env.NODE_ENV == "development") {
  // baseURL = "http://localhost:3000"
  baseURL = "https://api.aslegou.top";
} else {
  baseURL = "https://api.aslegou.top";
}

Vue.prototype.$pre = baseURL; //这个是为了方便在组件中使用

const http = axios.create({
  baseURL,
});

// 3.设置axios请求拦截
http.interceptors.request.use(async (config) => {
  // 弹起数据加载提示
  vm.$toast.loading({
    message: "玩命加载中...",
    duration: 0,
  });
  // 延迟执行请求
  await delay(1000);
  return config;
});

// 4.设置axios响应拦截
http.interceptors.response.use((res) => {
  // 请求结束关闭弹窗
  vm.$toast.clear();
  // 根据不同的相应状态码进行不同处理
  if (res.data.code == 200) {
    return Promise.resolve(res.data.list);
  } else if (res.data.code == 403) {
    // 登录过期 访问后端接口地址不对
  } else if (res.data.code == 500) {
    return Promise.reject(res.data);
  }
});

/**
 * 5.封装get请求方法
 * data:{
 *      url:"请求地址"
 *      params:{请求参数}
 * }
 * return:返回一个promise对象
 */
export const getData = (url, params) => {
  // 返回是一个promise对象
  return http.get(url, {
    params,
  });
};

/**
 * 5.封装post请求方法
 * data:{
 *      url:"请求地址"
 *      params:{请求参数}
 *      isFile:bool 是否有文件上传
 * }
 * return:返回一个promise对象
 */
export const postData = (url, params, isFile = false) => {
  let data = null;
  if (isFile) {
    // 1.有文件上传 FormData  mutiparty/form-data...
    data = new FormData();
    for (let key in params) {
      data.append(key, params[key]);
    }
  } else {
    // 2.无文件上传 qs x-www-form-url....
    data = qs.stringify(params);
  }

  // 返回是一个promise对象
  return http.post(url, data);
};
